home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
500 MB Nyheder Direkte fra Internet 2
/
500 MB nyheder direkte fra internet CD 2.iso
/
start
/
data
/
text
/
cobol.txt
< prev
next >
Wrap
Text File
|
1994-09-21
|
69KB
|
1,847 lines
FUN
Like BASIC and PASCAL, COBOL is a computer language. ``COBOL''
is pronounced ``koe ball'' and stands for ``COmmon Business
Oriented Language''.
COBOL solves business problems that involve large files of
data, so COBOL's used mainly by businesses having maxicomputers.
But today, you can use COBOL even on minicomputers and
microcomputers.
In the ``help wanted'' section of your local newspaper, many
ads that say ``programmer wanted'' are placed by businesses that
have maxicomputers and use COBOL. To get a job through the ``help
wanted'' section, a knowledge of COBOL will help you more than
PASCAL or FORTRAN.
The first version of COBOL was called COBOL 60, because it was
invented in 1960. Then came COBOL 61, COBOL 65, COBOL 68, COBOL
74, and COBOL 85. Today, most computers still use COBOL 74 or a
variation of it. This chapter explains how to write COBOL
programs that work on most computers.
During the 1960's and early 1970's, COBOL programmers used a
style called ``easy programming''. Today, most COBOL programmers
use a more sophisticated style, called structured programming.
This chapter explains structured programming. Though it's harder
to learn than easy programming, it will make your boss kiss you.
Simple programs
Every COBOL program is written as an outline. Here's a short
outline; to turn it into a COBOL program, just fill in the
blanks:
IDENTIFICATION DIVISION.
PROGRAM-ID.
The program's name.
AUTHOR.
Your name.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER.
The computer's name.
OBJECT-COMPUTER.
The computer's name again.
DATA DIVISION.
PROCEDURE DIVISION.
MAIN-ROUTINE.
What you want the computer to do.
STOP RUN.
For example, here's a
COBOL program I wrote:
Program Reason
IDENTIFICATION DIVISION.
PROGRAM-ID.
HARRY. The
program's name is HARRY.
AUTHOR.
RUSS WALTER. My
name is Russ Walter.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER.
DECSYSTEM-20. My
computer's a DECsystem-20.
OBJECT-COMPUTER.
DECSYSTEM-20.
DATA DIVISION.
PROCEDURE DIVISION.
MAIN-ROUTINE.
DISPLAY "LIFE STINKS." I want
the computer to gripe.
STOP RUN.
When I run that program,
the computer will print:
LIFE STINKS
Every COBOL program
consists of four parts. The first part of the program is called
the IDENTIFICATION DIVISION: it includes the program's name and
the programmer's name. The second part of the program is called
the ENVIRONMENT DIVISION: it includes the computer's name. The
third part of the program is called the DATA DIVISION; for a
simple program, the DATA DIVISION is blank. The fourth part of
the program is the PROCEDURE DIVISION: it says what you want the
computer to do.
The order is important:
the IDENTIFICATION DIVISION must come first, then the ENVIRONMENT
DIVISION, then the DATA DIVISION, and finally the PROCEDURE
DIVISION. So to become an expert COBOL programmer, you must
memorize: ``IDENTIFICATION, ENVIRONMENT, DATA, PROCEDURE''.
To memorize that easily,
memorize this easy sentence: ``I enjoy data processing''. In that
sentence, the words begin with the letters ``I E D P'' ___ and so
do the four COBOL divisions.
In the program, each
blank that you fill is called a paragraph. In the first
paragraph, write the program's name; in the next paragraph, write
your own name; in the next two paragraphs, write the computer's
name; and in the last paragraph, write what you want the computer
to do. The first paragraph is called the PROGRAM-ID; the next
paragraph is called the AUTHOR; the next two paragraphs are
called the SOURCE-COMPUTER and the OBJECT-COMPUTER; and the last
paragraph is called the MAIN-ROUTINE.
Each paragraph is
indented. To indent on PDP and Eclipse computers, type a
controlled I.
In COBOL, the only
important punctuation mark is the period. When writing a simple
program, put a period at the end of each line. COBOL never
requires commas or semicolons.
Don't forget the
hyphens! Put a hyphen in PROGRAM-ID, SOURCE-COMPUTER,
OBJECT-COMPUTER, and MAIN-ROUTINE.
Use correct spacing.
Right:DISPLAY "BURP".
Wrong:DIS PLAY "BURP".
Wrong:DISPLAY"BURP".
Wrong:DISPLAY "BURP" .
In the paragraphs that are called SOURCE-COMPUTER and
OBJECT-COMPUTER, you must type the computer's name correctly.
Here are the correct names for some famous computers:
IBM-360.
IBM-370.
PDP-11.
DECSYSTEM-10.(It means you have a PDP-10.)
DECSYSTEM-20.(It means you have a PDP-20.)
ECLIPSE C300.
6600. (It means you have a CDC 6600.)
Don't forget the hyphens!
Go ahead: try writing your own COBOL program. In the PROCEDURE
DIVISION, remember to say DISPLAY:
BASIC:10 PRINT "LIFE STINKS"
PASCAL:WRITELN('LIFE STINKS');
COBOL:DISPLAY "LIFE STINKS".
Old-fashioned computers On IBM computers, instead of using
quotation marks, you must use apostrophes.
Most computers: DISPLAY "LIFE STINKS".
IBM computers: DISPLAY 'LIFE STINKS'.
On IBM and CDC computers, you must indent the entire program,
like this (each ■ represents a blank space):
7 blanks 8th column
■■■■■■■IDENTIFICATION DIVISION.
■■■■■■■PROGRAM-ID.
■■■■■■■■■■■HARRY.
7 blanks 4 blanks
11 blanks 12th column
On those computers, each paragraph begins in column 12, and must
not go farther to the right than column 72. (The computer ignores
everything in columns 73-80.)
Abridgments
If you're lazy, you can omit the AUTHOR paragraph:
Complete IDENTIFICATION DIVISIONAbridged version
IDENTIFICATION DIVISION. IDENTIFICATION DIVISION.
PROGRAM-ID. PROGRAM-ID.
HARRY. HARRY.
AUTHOR.
RUSS WALTER.
If you're lazy, and you're using a PDP-10, PDP-20, Eclipse, or
IBM computer, you can omit the CONFIGURATION SECTION,
SOURCE-COMPUTER, and OBJECT-COMPUTER:
Complete ENVIRONMENT DIVISIONAbridged version
ENVIRONMENT DIVISION. ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER.
The computer's name.
OBJECT-COMPUTER.
The computer's name.
If you're very lazy, and you're using a PDP-10 or PDP-20
computer, you can abridge the program even further, so that the
entire program looks like this:
IDENTIFICATION DIVISION.
PROCEDURE DIVISION.
DISPLAY "LIFE STINKS".
STOP RUN.
But if you're working for a big company, your employer will
expect you to not be lazy: if you're lazy, you get fired!
Fancy displays
You've seen
that every COBOL program consists of four divisions:
IDENTIFICATION, ENVIRONMENT, DATA, and PROCEDURE. The most
important division is the PROCEDURE DIVISION. Let's look at it
more closely.
Here's a
cute PROCEDURE DIVISION:
PROCEDURE DIVISION.
MAIN-ROUTINE.
DISPLAY "BILLIE AND BONNIE".
DISPLAY "BURP".
STOP RUN.
It makes the
computer display:
BILLIE AND BONNIE
BURP
Another
example:
PROCEDURE DIVISION.
MAIN-ROUTINE.
DISPLAY "FLU" "SHED".
STOP RUN.
The computer will display FLU and SHED on the same line:
FLUSHED
PERFORM
Let's make the computer display ``I LOVE YOU'', then display
``I HATE YOU'' six times, then display ``I AM CONFUSED'', like
this:
I LOVE YOU
I HATE YOU
I HATE YOU
I HATE YOU
I HATE YOU
I HATE YOU
I HATE YOU
I AM CONFUSED
Here's the PROCEDURE DIVISION:
PROCEDURE DIVISION.
MAIN-ROUTINE.
DISPLAY "I LOVE YOU".
PERFORM EXPRESS-THE-HATRED 6 TIMES.
DISPLAY "I AM CONFUSED".
STOP RUN.
EXPRESS-THE-HATRED.
DISPLAY "I HATE YOU".
That PROCEDURE DIVISION consists of two paragraphs. The first
paragraph is called the MAIN-ROUTINE. The second paragraph is
called EXPRESS-THE-HATRED.
The computer obeys the first paragraph: it displays ``I LOVE
YOU'', then performs the EXPRESS-THE-HATRED 6 times, then
displays ``I AM CONFUSED'', and finally stops.
When you invent your own PROCEDURE DIVISION, the first
paragraph should be called the MAIN-ROUTINE; for the other
paragraphs underneath, invent whatever names you like (such as
EXPRESS-THE-HATRED). A paragraph's name should be hyphenated, and
should contain no more than 30 characters. (EXPRESS-THE-HATRED
contains 18 characters, so it's okay.) The first paragraph is the
main routine, the paragraphs underneath are subroutines. The
bottom line of the main routine should say STOP RUN. In the
middle of the main routine, you should say to PERFORM the
subroutines.
In the example above, the main routine says to PERFORM the
EXPRESS-THE-HATRED subroutine 6 times. If you'd like to see more
hatred, say 100 times instead of 6:
PERFORM EXPRESS-THE-HATRED 100 TIMES.
If you'd rather see just a little hatred, say just ___
PERFORM EXPRESS-THE-HATRED 1 TIMES.
or say just:
PERFORM EXPRESS-THE-HATRED.
Let's make the computer display:
I KNOW THAT
YOU ARE DRIVING
ME CRAZY
YOU ARE DRIVING
ME CRAZY
YOU ARE DRIVING
ME CRAZY
YOU ARE DRIVING
ME CRAZY
YOU ARE DRIVING
ME CRAZY
AND YET I LOVE YOU
Here's the PROCEDURE DIVISION:
PROCEDURE DIVISION.
MAIN-ROUTINE.
DISPLAY "I KNOW THAT".
PERFORM ACT-AS-IF-GOING-INSANE 5 TIMES.
DISPLAY "AND YET I LOVE YOU".
STOP RUN.
ACT-AS-IF-GOING-INSANE.
DISPLAY "YOU ARE DRIVING".
DISPLAY "ME CRAZY".
Let's make the computer
display:
THE ASTRONAUTS GO
UP
UP
UP
UP
UP
UP
UP
AND THEN THEY COME
DOWN
DOWN
DOWN
DOWN
DOWN
DOWN
DOWN
Here's the PROCEDURE DIVISION:
PROCEDURE DIVISION.
MAIN-ROUTINE.
DISPLAY "THE ASTRONAUTS GO".
PERFORM SHOW-THE-ASTRONAUTS-RISING 7 TIMES.
DISPLAY "AND THEN THEY COME".
PERFORM SHOW-THE-ASTRONAUTS-FALLING 7 TIMES.
STOP RUN.
SHOW-THE-ASTRONAUTS-RISING.
DISPLAY "UP".
SHOW-THE-ASTRONAUTS-FALLING.
DISPLAY "DOWN".
Let's make the computer
display:
YOU ARE VERY SWEET
HA-HA-HA!
HO-HO-HO!
YOU CANNOT BE BEAT
HA-HA-HA!
HO-HO-HO!
YOUR LIPS ARE LIKE WINE
HA-HA-HA!
HO-HO-HO!
BUT YOU SMELL LIKE TURPENTINE
HA-HA-HA!
HO-HO-HO!
YOU STINK!
Here's the PROCEDURE DIVISION:
PROCEDURE DIVISION.
MAIN-ROUTINE.
DISPLAY "YOU ARE VERY SWEET".
PERFORM LAUGH-A-LOT.
DISPLAY "YOU CANNOT BE BEAT".
PERFORM LAUGH-A-LOT.
DISPLAY "YOUR LIPS ARE LIKE WINE".
PERFORM LAUGH-A-LOT.
DISPLAY "BUT YOU SMELL LIKE TURPENTINE".
PERFORM LAUGH-A-LOT.
DISPLAY "YOU STINK!".
STOP RUN.
LAUGH-A-LOT.
DISPLAY "HA-HA-HA!".
DISPLAY "HO-HO-HO!".
VARIABLES
Like other languages, COBOL lets you use variables. The name of
a variable can be a letter (like X or Y) or a hyphenated phrase
(like NUMBER-OF-BULLIES-I-SQUIRTED). A hyphenated phrase can have
up to 30 characters.
To use a variable, you must describe it in the data division,
as in this example:
IDENTIFICATION DIVISION.
PROGRAM-ID.
JUNK.
AUTHOR.
RUSS WALTER.Instead of ``RUSS WALTER'', write your own
name.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER.
DECSYSTEM-20.Instead of ``DECSYSTEM-20'', write your
computer's name.
OBJECT-COMPUTER.
DECSYSTEM-20.
DATA DIVISION.
WORKING-STORAGE SECTION.In the DATA DIVISION, say WORKING-STORAGE
SECTION.
01 K PICTURE IS XXX.
PROCEDURE DIVISION.
MAIN-ROUTINE.
MOVE "HER" TO K.
DISPLAY "PUS" K "S".
STOP RUN.
In the DATA DIVISION's WORKING-STORAGE SECTION, the ``01
K'' says K is a variable. The PICTURE IS XXX says K is a string
that has three characters; each X stands for a character. In the
PROCEDURE DIVISION, the first sentence makes K become this
3-character string: ``HER''. The next sentence makes the computer
display:
PUSHERS
When you type that program, make sure you put a hyphen between
WORKING and STORAGE. If you forget the hyphen, the computer will
act crazy, and will say that your program contains many, many
errors.
Suppose you change the picture from XXX to XX, so that the DATA
DIVISION and PROCEDURE DIVISION look like this:
DATA DIVISION
WORKING-STORAGE SECTION
01 K PICTURE IS XX.
PROCEDURE DIVISION.
MAIN-ROUTINE.
MOVE "HER" TO K.
DISPLAY "PUS" K "S".
STOP RUN.
K will be a string having only two characters. When the computer
tries to move ``HER'' to K, only the first two characters of
``HER'' will fit, so K will be ``HE''. The computer will display:
PUSHES
Suppose you change the picture to XXXX. K will have four
characters. When the computer tries to move ``HER'' to K, it
needs to move a fourth character also, so it moves a blank space
at the end, which makes K be ``HER ''. The computer will display:
PUSHER S
This program shows how revolutionary politics lead to
revolutionary clothing:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 FIRST-PRESIDENT PICTURE IS XXXXXXXXXX.
01 CLEANING-METHOD PICTURE IS XXXX.
PROCEDURE DIVISION.
MAIN-ROUTINE.
MOVE "WASHINGTON" TO FIRST-PRESIDENT.
MOVE FIRST-PRESIDENT TO CLEANING-METHOD.
DISPLAY CLEANING-METHOD " MY BLUE JEANS".
STOP RUN.
Above the DATA DIVISION, write your own IDENTIFICATION DIVISION
and ENVIRONMENT DIVISION. The DATA DIVISION says FIRST-PRESIDENT
will be a string having ten characters, and CLEANING-METHOD will
be a string having four. The first sentence of the MAIN-ROUTINE
makes FIRST-PRESIDENT be ``WASHINGTON''. The next sentence tries
to move ``WASHINGTON'' to CLEANING-METHOD; but because of
CLEANING-METHOD's picture, the computer moves ``WASH'' instead.
The computer will display:
WASH MY BLUE JEANS
To make sure you understand the word MOVE, examine this
example:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 C PICTURE IS XXX.
01 D PICTURE IS XXX.
PROCEDURE DIVISION.
MAIN-ROUTINE.
MOVE "CAT" TO C.C becomes ``CAT''.
MOVE C TO D.D becomes ``CAT''.
DISPLAY C.Since C is still ``CAT'', the computer displays
``CAT''.
MOVE "HE" TO C.C becomes ``HE ''.
DISPLAY C "BLED".The computer displays ``HE BLED''.
STOP RUN.
COBOL allows abbreviations. You can say PIC instead of PICTURE
IS, and X(7) instead of XXXXXXX.
Numeric variables
Let's make the computer add 53 and 4, and display the sum, 57.
Here's how:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 K PIC 99.
PROCEDURE DIVISION.
MAIN-ROUTINE.
COMPUTE K = 53 + 4.
DISPLAY K.
STOP RUN.
The PIC 99 says K is a number having two digits. (Each 9 stands
for a digit.) The MAIN-ROUTINE sets K equal to 53 + 4, which is
57. The computer will display:
57
In the COMPUTE statement, the equal sign and the plus sign must
be surrounded by spaces.
Right: COMPUTE K = 53 + 4.
Wrong: COMPUTE K=53+4.
Wrong: COMPUTE K = 53+4.
If you change the picture to 999, K will be a number having
three digits. It will be 057 instead of 57. The computer will
display:
057
(Exception: PDP-10 and PDP-20 computers are lazy; they don't
bother to display the 0 at the left; they display just 57.)
If you change the picture to 9, K will be a number having only
one digit. so K will not be 57. The computer will not display the
correct sum.
Like
FORTRAN, COBOL uses these operators:
Operator
Meaning
+ plus
- minus
* times
/
divided by
**
exponent
You must put
a blank space before and after each operator:
Right Wrong
53 + 4 53+4
7 ** 2 7**2
- J + 3 -J + 3
Like other
computer languages, COBOL lets you use parentheses. Do not put a
space after a left parenthesis:
Right
COMPUTE K = I * (- J + 3)
no space spaces
You can use
these short cuts:
Sentence
Short cut
COMPUTE A = A + 7.
ADD 7 TO A.
COMPUTE B = B - 4.
SUBTRACT 4 FROM B.
Operators
are allowed only in sentences that say COMPUTE, IF, UNTIL, or
WHEN.
Allowed:
COMPUTE A = 2 * 3.
Not allowed:
DISPLAY 2 * 3.
Not allowed: MOVE 2
* 3 TO A.
Not allowed: ADD 2
* 3 TO A.
Decimals
You can use decimals:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 K PIC 9999V99.
PROCEDURE DIVISION.
MAIN-ROUTINE.
COMPUTE K = 2.208 + 4.109.
DISPLAY K.
STOP RUN.
The PIC 9999V99 says K is a number having four digits, followed
by a decimal point, followed by two digits. (The V stands for the
decimal point.) The MAIN-ROUTINE tries to set K equal to 2.208 +
4.109, which is 6.317; but because of K's picture, I will be
0006.31 instead. So the computer should display 0006.31.
PDP-10 and PDP-20 computers don't bother to display the zeros:
they display 6.31. PDP-11, IBM, CDC, and Eclipse computers don't
bother to display the decimal point: they display 000631.
You can change that program by saying ROUNDED:
COMPUTE K ROUNDED = 2.208 + 4.109.
The computer will find the sum (6.317), and round it so K is
0006.32 instead of 0006.31.
If J's picture is 99, saying ``COMPUTE J = 200 / 3'' makes J be
66. Saying ``COMPUTE J ROUNDED = 200 / 3'' makes J be 67.
Which is better: saying ``COMPUTE X = 4.9'' or ``MOVE 4.9 TO
X''? You should usually say ``MOVE 4.9 TO X'', because the
computer handles it more quickly. But MOVE cannot round; so if
you want to round, say COMPUTE.
MOVE can do strange things:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 L PIC 999V99.
PROCEDURE DIVISION.
MAIN-ROUTINE.
MOVE 16725.048 TO L.
DISPLAY L.
STOP RUN.
L's picture makes the computer move the three digits just left of
the decimal point and the two digits just right of it. L will be
725.04.
Negatives
You can use negative numbers:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 K PIC S9999.
PROCEDURE DIVISION.
MAIN-ROUTINE.
COMPUTE K = 100 - 367.
DISPLAY K.
STOP RUN.
In K's picture, the S stands for a sign (which can be plus or
minus). K will be -0267. The computer should display -0267.
PDP-10 and PDP-20 computers don't bother to display the zero:
they display -267. Some other computers display the minus sign on
top of the right digit, like this: 0267. On many computers, the
minus combines with the 7 and forms a P, like this: 026P.
If you omit the S from K's picture, K will be 0267 instead of
-0267.
To find the negative of
a power, use parentheses:
COMPUTE A = - (3 ** 2).
If you omit the parentheses, the computer will get the wrong
answer.
ACCEPT
Here's how to translate
the BASIC word INPUT into PASCAL and COBOL.
BASIC: INPUT K
PASCAL: READ(K);
COBOL: ACCEPT K.
Let's look at a COBOL
example:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 K PIC XXX.
PROCEDURE DIVISION.
MAIN-ROUTINE.
DISPLAY "THIS PROGRAM WANTS YOU TO TYPE SOMETHING".
ACCEPT K.
DISPLAY K.
STOP RUN.
The computer displays:
THIS PROGRAM WANTS YOU TO TYPE SOMETHING
The statement ACCEPT K
makes the computer wait for you to type something. If you type
___
FIGHT
the computer will try to move ``FIGHT'' to K; but since K's
picture is XXX, K will be ``FIG''. The computer will display:
FIG
If you type ___
ME
the computer will try to move ``ME'' to K; since K's picture is
XXX, K will be ``ME ''. The computer will display:
ME
Suppose a program says L
PIC 999 and ACCEPT L. If you input ___
4
a PDP-10 or PDP-20 computer will make L be 004, but an IBM or CDC
computer will make L be 400.
Suppose a program says M
PIC S9999V99 and ACCEPT M. If you want M to be -0034.27, here's
what to input. . . .
On PDP-10 & PDP-20 computers: -0034.27 or -34.27
On IBM and CDC computers: 003427
Editing
The computer can edit the output:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 K PIC XXXBXXX.
PROCEDURE DIVISION.
MAIN-ROUTINE.
MOVE "HITHER" TO K.
DISPLAY K.
STOP RUN.
In K's picture, B means a blank space. So when the computer
moves ``HITHER'', K becomes ``HIT HER''. The computer will
display:
HIT HER
This program displays the Boston Computer Society's phone
number:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PHONE-NUMBER PIC 999B9999.
PROCEDURE DIVISION.
MAIN-ROUTINE.
MOVE 3678080 TO PHONE-NUMBER.
DISPLAY PHONE-NUMBER.
STOP RUN.
When the computer moves 3678080, PHONE-NUMBER becomes ``367
8080''. The computer will display:
367 8080
This program is of historical importance:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 K PIC 9B9B9999.
PROCEDURE DIVISION.
MAIN-ROUTINE.
COMPUTE K = 741775 + 1.
DISPLAY "THE DECLARATION OF INDEPENDENCE WAS SIGNED ON "
K.
STOP RUN.
The computer will display:
THE DECLARATION OF INDEPENDENCE WAS SIGNED ON 7 4 1776
Using B to insert a blank is called editing. You've learned
four kinds of variables:
Kind of variableSymbols in picture
string X
edited stringX B
number 9 V S
edited number9 B Z , $ * . + - DB CR
You can use these pictures for editing numbers:
K's pictureMeaning What K will be if you move 50320 to KWhat K
will be if you move 0 to K
B99999999a blank then eight digits" 00050320" " 00000000"
ZZZZZZZZZblanks then digits" 50320" " "
$,$$$,$$$put $ before the digits" $50,320" " "
*,***,***stars instead of blanks"***50,320" "*********"
To edit decimals, put a decimal point in the picture.
K's pictureIf you move 50320.6 to KIf you move .04 to KIf you
move 0 to K
Z,ZZZ,ZZZ.ZZ" 50,320.60"" .04"" "
$,$$$,$$$.$$" $50,320.60"" $.04"" "
*,***,***.**"***50,320.60""*********.04""*********.**"
With those pictures, if you move 0 to K the computer doesn't
put any digits in K. To guarantee that K contains a digit, put 9
in the picture:
K's pictureIf you move 50320.6 to KIf you move .04 to KIf you
move 0 to K
Z,ZZZ,ZZ9.99" 50,320.60"" 0.04"" 0.00"
$,$$$,$$9.99" $50,320.60"" $0.04"" $0.00"
*,***,**9.99"***50,320.60""********0.04""********0.00"
To edit negative numbers, use +, -, DB, or CR.
K's pictureMeaning If you move -2.6 to KIf you move 2.6 to K
ZZZ.ZZ+ put - or + afterwards" 2.60-" " 2.60+"
ZZZ.ZZ- put - or blank afterwards" 2.60-"" 2.60 "
ZZZ.ZZDBif negative, put DB (for debit)" 2.60DB"" 2.60 "
ZZZ.ZZCRif negative, put CR (for credit)" 2.60CR"" 2.60 "
For fancier pictures, replace the Z by $, *, or 9.
Here's how to put the sign before the digits:
K's pictureMeaning If you move -2.6 to KIf you move 2.6 to K
+++.++ put - or + before digits" -2.60"" +2.60"
---.-- - or blank before digits" -2.60"" 2.60"
Here are the differences between numbers and edited numbers:
Number Edited number
how to put decimal point in the pictureV .
how to put a sign in the pictureS +, -, DB, or CR
how to fill up most of the picture9 9, Z, $, *, +, or -
what the value should beintermediate result in long
calculationthe final answer to be displayed
If the value's called K, can you say ACCEPT K?yesno
If the value's called K, can you use K in furtheryesno
computations (such as COMPUTE L = K + 1)?
What happens if you try to DISPLAY the value?the ``0'', ``.'',
and ``-'' might look wrong displays correctly
DECIMAL-POINT IS COMMA
Some Europeans write commas instead of decimal points, and
write decimal points instead of commas.
United States and England:5,243,794.95
France and Italy:5.243.794,95
Germany: 5 243 794,95
To write a COBOL program for a Frenchman, an Italian, or a
German, make three changes. . . .
Change #1 Insert this line:
DECIMAL-POINT IS COMMA.
Put that line in a SPECIAL-NAMES paragraph, at the end of the
ENVIRONMENT DIVISION's CONFIGURATION SECTION:
CONFIGURATION SECTION.
SOURCE-COMPUTER.
The computer's name.
OBJECT-COMPUTER.
The computer's name again.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
Change #2 Type all numbers in French-Italian-German notation.
So instead of typing ___
MOVE 5243794.95 TO K
type:
MOVE 5243794,95 TO K
Change #3 Use French-Italian-German notation in pictures for
edited numbers.
For a Frenchman or an Italian:K PIC Z.ZZZ.ZZZ,ZZ
For a German: K PIC ZBZZZBZZZ,ZZ
Those are the only changes Europeans make. They still put a
period at the end of every sentence, and still use English COBOL
words such as MOVE and DISPLAY.
American COBOL:DISPLAY "HELLO, STUPID".
French COBOL:DISPLAY "BONJOUR, BETE".
German COBOL:DISPLAY "GUTEN TAG, DUMMKOPF".
LOGIC
COBOL lets you do logic.
IF
Like other computer languages, COBOL uses the word IF:
BASIC PASCAL COBOL
INPUT I READ(I);ACCEPT I.
IF I>5 THEN J=80: K=90 IF I>5 THENIF I > 5
BEGIN; MOVE 80 TO J
J:=80; MOVE 90 TO K.
K:=90;
END;
COBOL also lets you say ELSE:
BASIC PASCAL COBOL
INPUT I READ(I);ACCEPT I.
IF I>5 THEN J=80: K=90 ELSE J=30: K=50IF I>5 THENIF I > 5
BEGIN; MOVE 80 TO J
J:=80; MOVE 90 TO K
K:=90;ELSE
END MOVE 30 TO J
ELSE MOVE 50 TO K.
BEGIN;
J:=30;
K:=50;
END;
In COBOL, when you write the IF statement, do not put a period
at the end of every line; instead, put the period just at the end
of the entire IF idea.
Notice that I indented the word MOVE. The indentation is
optional, but is a good habit. To indent on PDP and Eclipse
computers, type a controlled I; to indent on IBM and CDC
computers, press the space bar several times.
COBOL uses these IF lines:
IF line Meaning
IF I = 5If I is equal to 5
IF I NOT = 5If I is not equal to 5
IF I > 5If I is greater than 5
IF I NOT > 5If I is not greater than 5
IF I < 5If I is less than 5
IF I NOT < 5IF I is not less than 5
You can use the words AND and OR and abbreviate:
IF line:IF J > 1 AND J < 100
Abbreviation:IF J > 1 AND < 100
IF line:IF K < -3 OR K = 6 OR K = 9 OR K = 12 OR K > 50
Abbreviation:IF K < -3 OR = 6 OR 9 OR 12 OR > 50
You can say this:
IF AGE < 13
DISPLAY "CHILD"
ELSE IF AGE < 20
DISPLAY "TEENAGER"
ELSE IF AGE < 40
DISPLAY "YOUNG ADULT"
ELSE IF AGE < 60
DISPLAY "MIDDLE-AGED"
ELSE
DISPLAY "SENIOR CITIZEN".
It means, ``If AGE is less than 13, display the word CHILD; if
not less than 13, do the following: if AGE is less than 20,
display the word TEENAGER; if not less than 20, do the following:
if AGE is less than 40, . . . '' and so on. The computer will
display just one phrase, to describe the person's AGE.
UNTIL
You can say UNTIL:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 I PIC 999.
PROCEDURE DIVISION.
MAIN-ROUTINE.
MOVE 5 TO I.
PERFORM FIDDLE-WITH-I UNTIL I > 100.
STOP RUN.
FIDDLE-WITH-I.
DISPLAY I.
COMPUTE I = I * 2.
The computer will perform FIDDLE-WITH-I repeatedly, until I >
100. The computer will display 5, 10, 20, 40, and 80. It will not
display 160.
Here are the details. When the computer encounters PERFORM
FIDDLE-WITH-I UNTIL I > 100, it checks whether I > 100. If I >
100, the computer proceeds to the next statement (the STOP RUN);
but if I is not greater than 100, the computer performs
FIDDLE-WITH-I and then re-executes the statement PERFORM
FIDDLE-WITH-I UNTIL I > 100.
To translate a BASIC ``FOR...NEXT loop'' into COBOL, say
``PERFORM'':
BASIC COBOL
10 FOR I = 5 TO 17PROCEDURE DIVISION.
20 PRINT I MAIN-ROUTINE.
30 NEXT I PERFORM DISPLAY-IT
VARYING I FROM 5 BY 1 UNTIL I >
17.
STOP RUN.
DISPLAY-IT.
DISPLAY I.
10 FOR I = 5 TO 17 STEP 3PROCEDURE DIVISION.
20 PRINT I MAIN-ROUTINE.
30 NEXT I PERFORM DISPLAY-IT
VARYING I FROM 5 BY 3 UNTIL I >
17.
STOP RUN.
DISPLAY-IT.
DISPLAY I.
10 FOR I = 5 TO 17PROCEDURE DIVISION.
20 FOR J = 1 TO 3MAIN-ROUTINE.
30 PRINT I,J PERFORM DISPLAY-IT
40 NEXT J VARYING I FROM 5 BY 1 UNTIL I >
17
50 NEXT I AFTER J FROM 1 BY 1 UNTIL J > 3.
STOP RUN.
DISPLAY-IT.
DISPLAY I J.
GO TO
Like other computer languages, COBOL lets you say GO TO. In
COBOL, put a space between GO and TO. (In PASCAL, you do not put
a space between GO and TO.)
For example, instead of saying STOP RUN, you can say GO TO
MAIN-ROUTINE:
PROCEDURE DIVISION.
MAIN-ROUTINE.
DISPLAY "WHEATIES".
DISPLAY "ARE WONDERFUL".
GO TO MAIN-ROUTINE.
The computer will display ``WHEATIES'' and ``ARE WONDERFUL'',
repeatedly:
WHEATIES
ARE WONDERFUL
WHEATIES
ARE WONDERFUL
WHEATIES
ARE WONDERFUL
etc.
The main routine can consist of two paragraphs, called
MAIN-ROUTINE-BEGINNING and MAIN-ROUTINE-LOOP:
PROCEDURE DIVISION.
MAIN-ROUTINE-BEGINNING.
DISPLAY "PLEASE".
MAIN-ROUTINE-LOOP.
DISPLAY "KISS".
DISPLAY "ME".
GO TO MAIN-ROUTINE-LOOP.
The computer will display PLEASE, then repeatedly display KISS
and ME:
PLEASE
KISS
ME
KISS
ME
KISS
ME
etc.
The main routine can consist of three paragraphs, called
MAIN-ROUTINE-BEGINNING, MAIN-ROUTINE-LOOP, and
MAIN-ROUTINE-ENDING:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 HUMAN-RESPONSE PIC XXX.
PROCEDURE DIVISION.
MAIN-ROUTINE-BEGINNING.
DISPLAY "I WILL RECITE A SHORT POEM".
MAIN-ROUTINE-LOOP.
DISPLAY " ".
DISPLAY "YOUR NOSE".
DISPLAY "BLOWS".
DISPLAY " ".
DISPLAY "WOULD YOU LIKE TO HEAR THE POEM AGAIN?".
ACCEPT HUMAN-RESPONSE.
IF HUMAN-RESPONSE = "YES"
GO TO MAIN-ROUTINE=LOOP.
MAIN-ROUTINE-ENDING.
DISPLAY "YOU HAVE BEEN A GREAT AUDIENCE".
STOP RUN.
When you run that program, the computer says:
I WILL RECITE A SHORT POEM
Then it recites the program:
YOUR NOSE
BLOWS
Then it asks:
WOULD YOU LIKE TO HEAR THE POEM AGAIN?
If you answer YES, the computer repeats the poem, then asks
whether you'd like to hear it a third time. If you answer YES
again, the computer recites the poem a third time, then asks
whether you'd like to hear it a fourth time. The computer recites
the poem repeatedly, until you finally stop answering YES. Then
the computer says ___
YOU HAVE BEEN A GREAT AUDIENCE
and stops.
In that program, if you
don't answer YES, the computer doesn't repeat the poem. So if you
don't answer YES, the computer acts as if you said NO. The
following version is an improvement; if you don't answer YES, and
you don't say NO, the computer asks the question again:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 HUMAN-RESPONSE PIC XXX.
PROCEDURE DIVISION.
MAIN-ROUTINE-BEGINNING.
DISPLAY "I WILL RECITE A SHORT POEM".
MAIN-ROUTINE-LOOP.
DISPLAY " ".
DISPLAY "YOUR NOSE".
DISPLAY "BLOWS".
DISPLAY " ".
PERFORM GET-HUMAN-RESPONSE.
IF HUMAN-RESPONSE = "YES"
GO TO MAIN-ROUTINE-LOOP.
MAIN-ROUTINE-ENDING.
DISPLAY "YOU HAVE BEEN A GREAT AUDIENCE".
STOP RUN.
GET-HUMAN-RESPONSE.
DISPLAY "WOULD YOU LIKE TO HEAR THE POEM AGAIN?".
ACCEPT HUMAN-RESPONSE.
IF HUMAN-RESPONSE NOT = "YES" AND NOT = "NO"
DISPLAY "PLEASE SAY YES OR NO!"
GO TO GET-HUMAN-RESPONSE.
GO TO resembles PERFORM.
Here's the difference between GO TO and PERFORM. . . .
To go to a different routine, say PERFORM.
To go to a different paragraph in the same routine, say GO TO.
For example, suppose you
want to go from MAIN-ROUTINE-BEGINNING to FUNNY-SUBROUTINE; since
you're going to a different routine, say PERFORM.
Suppose you want to go
from MAIN-ROUTINE-BEGINNING to MAIN-ROUTINE-ENDING; since you're
going to a different paragraph in the same routine, say GO TO.
THRU
Like the main routine, a
subroutine can consist of several paragraphs. For example,
subroutine FUNNY-FACE can consist of three paragraphs, called
FUNNY-FACE-BEGINNING, FUNNY-FACE-LOOP, and FUNNY-FACE-ENDING. To
make the computer do the entire subroutine, say:
PERFORM FUNNY-FACE-BEGINNING THRU FUNNY-FACE-ENDING.
DATA FILES
To manipulate a data file whose name is POEM, fill in the
blanks:
IDENTIFICATION DIVISION.
PROGRAM-ID.
The program's name.
AUTHOR
Your name.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER.
The computer's name.
OBJECT-COMPUTER.
The computer's name again.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT POEM-FILE ASSIGN TO the file's location.
DATA DIVISION.
FILE SECTION.
FD POEM-FILE how the file is labeled.
01 POEM-LINE PIC a picture of a line of the file.
WORKING-STORAGE SECTION.
A description of each variable that's not in the file.
PROCEDURE DIVISION.
MAIN-ROUTINE.
OPEN output or input POEM-FILE.
What you want to do to the file.
CLOSE POEM-FILE.
STOP RUN.
The four divisions
Like every COBOL program, that outline consists of four
divisions: the IDENTIFICATION DIVISION, the ENVIRONMENT DIVISION,
the DATA DIVISION, and the PROCEDURE DIVISION. Let's look at each
division.
IDENTIFICATION DIVISION The IDENTIFICATION DIVISION consists of
two paragraphs: the PROGRAM-ID and the AUTHOR. For the
PROGRAM-ID, fill in the program's name, which must be different
from the name of the file. Since the name of the file is POEM,
the name of the program must not be POEM. If you're lazy, you can
omit the AUTHOR.
ENVIRONMENT DIVISION The ENVIRONMENT DIVISION consists of two
sections: the CONFIGURATION SECTION and the INPUT-OUTPUT SECTION.
The CONFIGURATION SECTION consists of two paragraphs: the
SOURCE-COMPUTER and the OBJECT-COMPUTER. On CDC and PDP-11
computers, the CONFIGURATION SECTION is required; but on IBM,
Eclipse, PDP-10, and PDP-20 computers, the entire CONFIGURATION
SECTION is optional, so you can abridge the ENVIRONMENT DIVISION:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT POEM-FILE ASSIGN TO the file's location.
The INPUT-OUTPUT SECTION consists of just one paragraph, which
is the FILE-CONTROL. The FILE-CONTROL paragraph consists of a
sentence that says SELECT, then the file's name (POEM-FILE), then
ASSIGN TO, and finally a blank (which you must fill in, and which
tells the file's location).
What do you put in that blank? The answer depends on the file's
location. Is the file on a disk? On punched cards? Or on paper
produced by the printer? Here's what to put in the blank, for
various computers:
Printer Card reader Disk
Eclipse PRINTER "$CDR" "POEM"
CDC OUTPUT INPUT POEM
PDP-11 "LP:" "CR:" "DK":
PDP-10, PDP-20LPT CDR DSK RECORDING MODE ASCII
IBM using OSUT-S-POEMUT-S-POEM UT-S-POEM
IBM using DOSSYS006-UR-1403-S SYS005-UR-2540R-SSYS020-UT-3330-S-P
OEM
DATA DIVISION The DATA DIVISION consists of two sections: the
FILE SECTION and the WORKING-STORAGE SECTION.
At the beginning of the FILE SECTION, say FD (which means
``File Description''). To the right of the FD, say POEM-FILE, and
then fill in the blank, which tells how the file is labeled:
Computer What to put in the blank
CDC LABEL RECORDS ARE OMITTED
PDP-11: disk LABEL RECORDS ARE STANDARD VALUE OF ID "POEM"
PDP-11: printer or card readerLABEL RECORDS ARE OMITTED
PDP-10, PDP-20 VALUE ID "POEM■■■■■"
IBM OS LABEL RECORDS ARE STANDARD
IBM DOS: disk LABEL RECORDS ARE STANDARD
IBM DOS: printer or card readerLABEL RECORDS ARE OMITTED
On PDP-10 and PDP-20 computers, put enough blank spaces (■)
after POEM so that the string has 9 characters. On Eclipse
computers, do not fill in the blank; just say:
FD POEM-FILE.
Underneath the line that says FD, you must say 01. The 01 line
includes a picture of a line of the file. For example, if a line
of the file is an 80-character string, the 01 line should say:
01 POEM-LINE PIC X(80).
The WORKING-STORAGE SECTION describes each variable that's not
in the file.
PROCEDURE DIVISION The PROCEDURE DIVISION's MAIN-ROUTINE should
begin with the word OPEN, and end with the words CLOSE and STOP
RUN.
In the OPEN statement, you can say either ___
OPEN OUTPUT POEM-FILE.
or:
OPEN INPUT POEM-FILE.
If you say OPEN OUTPUT POEM-FILE, the computer will output to the
POEM-FILE; so it will copy information from the RAM to the
POEM-FILE. If you say OPEN INPUT POEM-FILE, the computer will
input from the POEM-FILE; so it will copy information from the
POEM-FILE to the RAM.
In the PROCEDURE DIVISION, when you fill in the blank about
``what you want to do to the file'', you must say either WRITE
POEM-LINE or READ POEM-FILE. If the file is OPEN OUTPUT (which
means you're copying from the RAM to the file), say WRITE
POEM-LINE; if the file is OPEN INPUT (which means you're copying
from the file to the RAM), say READ POEM-FILE.
Writing
Here's a poetic masterpiece:
CANDY IS DANDY
BUT LIKKER IS QUIKKER
It was composed by the famous poet Ogden Nash.
This program makes the computer write that masterpiece onto a
disk, and make the masterpiece become a file named POEM:
Program Meaning
IDENTIFICATION DIVISION.
PROGRAM-ID.
CANDY. This program is named CANDY.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER.
The computer's name.
OBJECT-COMPUTER.
The computer's name again.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT POEM-FILE ASSIGN TO the file's location.This
program uses a file called POEM.
DATA DIVISION.
FILE SECTION.
FD POEM-FILE how the file is labeled.
01 POEM-LINE PIC X(21). Make each line have 21
characters, like this:
CANDY IS DANDY■■■■■■■
PROCEDURE DIVISION. BUT LIKKER IS QUIKKER
MAIN-ROUTINE.
OPEN OUTPUT POEM-FILE. Prepare to output to POEM-FILE.
MOVE "CANDY IS DANDY" TO POEM-LINE.Make POEM-LINE be
``CANDY IS DANDY■■■■■■■''.
WRITE POEM-LINE. Copy that POEM-LINE to the
file.
MOVE "BUT LIKKER IS QUIKKER" TO POEM-LINE.Make POEM-LINE
become this new string: ``BUT LIKKER IS QUIKKER''.
WRITE POEM-LINE. Copy that new POEM-LINE to the
file.
CLOSE POEM-FILE. Finish using POEM-FILE.
STOP RUN. Stop running this program.
That program doesn't require a WORKING-STORAGE SECTION, so I
omitted it. Since I was lazy, I also omitted the AUTHOR
paragraph.
When you run that program, the computer will create a file on
disk. The file will be called POEM. It will contain this message:
CANDY IS DANDY■■■■■■■
BUT LIKKER IS QUIKKER
Reading
This program reads the file POEM, and displays it on your
terminal:
IDENTIFICATION DIVISION.
PROGRAM-ID.
READER.
The ENVIRONMENT DIVISION and DATA DIVISION are the same as the
previous program's.
PROCEDURE DIVISION.
MAIN-ROUTINE-BEGINNING.
OPEN INPUT POEM-FILE. Find POEM on the disk, and
prepare to input from it.
MAIN-ROUTINE-LOOP.
READ POEM-FILE AT END GO TO MAIN-ROUTINE-ENDING.Read a
line from POEM-FILE; if no more lines, go to next paragraph.
DISPLAY POEM-LINE. Display that line, so you see
it on your screen.
GO TO MAIN-ROUTINE-LOOP. Go back to read another line.
MAIN-ROUTINE-ENDING.
DISPLAY "THAT WAS THE WHOLE POEM".Display ``THAT WAS THE
WHOLE POEM'' on your screen.
CLOSE POEM-FILE. Finish using POEM-FILE.
STOP RUN. Stop running this program.
In the MAIN-ROUTINE-LOOP, the first line means: try to READ a
line from POEM-FILE; but if a line cannot be read (because the
file has ended), go to MAIN-ROUTINE-ENDING instead.
The READ statement differs from the WRITE statement in two
ways:
A WRITE statement mentions a LINE, but a READ statement mentions
a FILE.
A READ statement must contain the words AT END.
Counting
This program reads a file called POEM, counts how many lines
are in it, and displays the count:
IDENTIFICATION DIVISION.
PROGRAM-ID.
COUNTS.
The ENVIRONMENT DIVISION is same as previous program's.
DATA DIVISION.
FILE SECTION.
FD POEM-FILE how the file is labeled.
01 POEM-LINE PIC X(21). Assume each POEM-LINE has 21
characters.
WORKING-STORAGE SECTION.
01 COUNT-OF-HOW-MANY-LINES PIC 99.Assumes the count is a
two-digit number,
so assume POEM has less than
100 lines.
PROCEDURE DIVISION.
MAIN-ROUTINE-BEGINNING.
OPEN INPUT POEM-FILE. Find POEM on the disk.
MOVE 0 TO COUNT-OF-HOW-MANY-LINES.Start the count at 0.
MAIN-ROUTINE-LOOP.
READ POEM-FILE AT END GO TO MAIN-ROUTINE-ENDING.Read a
line from POEM-FILE.
ADD 1 TO COUNT-OF-HOW-MANY-LINES.Add 1 to the count.
GO TO MAIN-ROUTINE-LOOP. Go read another line.
MAIN-ROUTINE-ENDING. When all lines have been
read,
DISPLAY COUNT-OF-HOW-MANY-LINES.display the count,
CLOSE POEM-FILE. finish using POEM-FILE,
STOP RUN. and stop running this
program.
Copying
This program reads a file called POEM, and creates a copy of
it; the copy is a file called POEM2:
IDENTIFICATION DIVISION.
PROGRAM-ID.
COPIER.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER.
The computer's name.
OBJECT-COMPUTER.
The computer's name again.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT POEM-FILE ASSIGN TO the location of POEM.
SELECT POEM2-FILE ASSIGN TO the location of POEM-2.
DATA DIVISION.
FILE SECTION.
FD POEM-FILE the labeling for POEM.
01 POEM-LINE PIC X(21).
FD POEM2-FILE the labeling for POEM2.
01 POEM2-LINE PIC X(21).
PROCEDURE DIVISION.
MAIN-ROUTINE-BEGINNING.
OPEN INPUT POEM-FILE. Prepare to input from
POEM-FILE,
OPEN OUTPUT POEM2-FILE. and output to POEM2-FILE.
MAIN-ROUTINE-LOOP. Do the following repeatedly:
READ POEM-FILE AT END GO TO MAIN-ROUTINE-ENDING.read a
line from POEM-FILE,
MOVE POEM-LINE TO POEM2-LINE.copy that line to
POEM2-LINE,
WRITE POEM2-LINE. and write POEM2-LINE to
POEM2-FILE.
GO TO MAIN-ROUTINE-LOOP.
MAIN-ROUTINE-ENDING. At the end,
DISPLAY "THE FILE HAS BEEN COPIED".display ``THE FILE HAS
BEEN COPIED'' on the screen,
CLOSE POEM-FILE POEM2-FILE. finish using the files,
STOP RUN. and stop running this
program.
Pictures
Suppose you're dealing with a file named JOE, and each line of
JOE-FILE is a three-digit number. Should the line's picture be
edited (JOE-LINE PIC ZZZ) or unedited (JOE-LINE PIC 999)?
When you read a file, the line's picture must be unedited and
match the picture in the program that wrote the file.
When you write a file, ask yourself, ``What will read it?'' If
the answer is ``a COBOL program'', the picture must be unedited.
If the answer is ``only a human'', edit the picture.
Remember: if one program writes a file, and another program
reads it, both programs must use the same picture. For example,
if a program writes JACK-FILE and says JACK-LINE PIC S9999V99,
the program that reads JACK-FILE must also say JACK-LINE PIC
S9999V99.
Peculiarities
To write and read unedited numbers, the computer takes a
short-cut: it omits decimal points, and locates the negative sign
on top of the last digit. For example, instead of writing
-0034.27 in JACK-FILE, the computer writes just 003427. When
another program reads 003427 from the file, the S9999V99 picture
tells the computer the 003427 means -0034.27.
After you WRITE a line, you cannot use the line again in the
program. For example, after you say WRITE POEM-LINE, you should
not say MOVE POEM-LINE TO K; it won't work.
Multiple widths
Let's make the computer compute the square of 12 and the square
of 13 and write this file:
HERE ARE THE SQUARES:
144
169
THEY WERE REAL GROOVY
The top and bottom lines are long strings whose pictures are
X(21). The other two lines are short numbers whose pictures are
999.
Here's the program:
IDENTIFICATION DIVISION.
PROGRAM-ID.
SQUARE.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER.
The computer's name.
OBJECT-COMPUTER.
The computer's name again.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT REPORT-FILE ASSIGN TO location of REPORT.This
program uses a file called REPORT.
DATA DIVISION.
FILE SECTION.
FD REPORT-FILE the labeling for REPORT.
01 REPORT-LINE PIC X(21). REPORT-LINE is a 21-character
string.
01 REPORT-LINE2 PIC 999. REPORT-LINE2 is a 3-digit
number.
PROCEDURE DIVISION.
MAIN-ROUTINE.
OPEN OUTPUT REPORT-FILE. Create a file named REPORT.
MOVE "HERE ARE THE SQUARES:" TO REPORT-LINE.REPORT-LINE
is ``HERE ARE THE SQUARES:''.
WRITE REPORT-LINE. Write ``HERE ARE THE
SQUARES:''.
COMPUTE REPORT-LINE2 = 12 * 12.REPORT-LINE2 is 144.
WRITE REPORT-LINE2. Write 144.
COMPUTE REPORT-LINE2 = 13 * 13.REPORT-LINE2 is 169.
WRITE REPORT-LINE2. Write 169.
MOVE "THEY WERE REAL GROOVY" TO REPORT-LINE.REPORT-LINE
is ``THEY WERE REAL GROOVY''.
WRITE REPORT-LINE. Write ``THEY WERE REAL
GROOVY''.
CLOSE REPORT-FILE. Finish using REPORT.
STOP RUN. Stop running this program.
ADVANCED STRUCTURES
COBOL lets you create and manipulate advanced structures.
Group items
In the data division, you can say:
01 K.
02 L PIC 999.
02 M PIC 9.
02 N PIC 99.
That means K is a combination of L, M, and N. If the procedure
division says ___
MOVE 427 TO L.
MOVE 8 TO M.
MOVE 31 TO N.
then K will be ``427831''.
Since K is a combination of other variables, K is called a
group variable or group item. L, M, and N are elementary items.
Notice that K is the string ``427831'', not the number 427831. A
group item is always a string. Since K is a string, not a number,
you cannot say ADD 1 TO K, although you can say ADD 1 TO L or ADD
1 TO M or ADD 1 TO N.
Here's a group item, for a weight-reducing studio:
01 PERSONAL-INFO-ABOUT-CLIENT.
02 CLIENT-NAME.
03 FIRST-NAME PIC X(15).
03 MIDDLE-INITIAL PIC X.
03 LAST-NAME PIC X(20).
02 CLIENT-SEX PIC X.A person's sex is ``M'' or
``F''.
02 CLIENT-AGE PIC 99.
02 WEIGHT-PROGRESS.
03 WEIGHT-WHEN-ENTERED-PROGRAM PIC 999.
03 WEIGHT-THIS-WEEK PIC 999.
03 NUMBER-OF-WEEKS-SO-FAR PIC 999.
PERSONAL-INFO-ABOUT-CLIENT is composed of CLIENT-NAME (which is
composed of FIRST-NAME, MIDDLE-INITIAL, and LAST-NAME),
CLIENT-SEX, and WEIGHT-PROGRESS (which is composed of
WEIGHT-WHEN-ENTERED-PROGRAM, WEIGHT-THIS-WEEK, and
NUMBER-OF-WEEKS-SO-FAR). So PERSONAL-INFO-ABOUT-CLIENT is
composed of numbers and strings.
Altogether, PERSONAL-INFO-ABOUT-CLIENT contains 48 characters
(15 + 1 + 20 + 1 + 2 + 3 + 3 + 3). The computer considers
PERSONAL-INFO-ABOUT-CLIENT to be a string whose picture is X(48).
If you say L PIC X(48), you can move all the
PERSONAL-INFO-ABOUT-CLIENT to L by saying:
MOVE PERSONAL-INFO-ABOUT-CLIENT TO L.
To move the CLIENT-NAME to M, without moving the CLIENT-SEX,
CLIENT-AGE, and WEIGHT-PROGRESS, say:
MOVE CLIENT-NAME TO M.
To write lots of information to a file, make the file's LINE be
a group item.
How to extract from a file Suppose you've already created a
file whose name is EMPLOY; it's on disk or cards. Suppose the
file contains information about employees. Suppose each line of
the file contains 80 characters, as follows. Characters 1-40 are
the employee's name. Characters 61-70 are the employee's home
phone number, including the area code. The other characters
(41-60 and 71-80) are miscellaneous information (such as the
employee's age, sex, address, salary, kind of job, and number of
years with the company).
Let's create a new file, called REPORT, on disk or on the
printer's paper. Let's make REPORT contain just the employees'
names and phone numbers, and omit the ``miscellaneous
information''. Here's how:
IDENTIFICATION DIVISION.
PROGRAM-ID.
PHONES.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER.
The computer's name.
OBJECT-COMPUTER.
The computer's name again.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT EMPLOY-FILE ASSIGN TO location of EMPLOY.
SELECT REPORT-FILE ASSIGN TO location of REPORT.
DATA DIVISION. Throughout the DATA DIVISION,
the special word "FILLER"
FILE SECTION. stands for data the program
won't use.
FD EMPLOY-FILE the labeling for EMPLOY.
01 EMPLOY-LINE.
02 EMPLOYEE-NAME PIC X(40).Characters 1-40 are
EMPLOYEE-NAME.
02 FILLER PIC X(20). Characters 41-60 are
irrelevant.
02 HOME-PHONE.
03 AREA-CODE PIC 999.Characters 61-63 are
AREA-CODE.
03 PHONE-EXCHANGE PIC 999.Characters 64-66
are PHONE-EXCHANGE.
03 REST-OF-PHONE-NUMBER PIC 9999.Characters
67-70 are REST-OF-PHONE-NUMBER.
02 FILLER PIC X(10). Characters 71-80 are
irrelevant.
FD REPORT-FILE the labeling for REPORT.
01 REPORT-LINE. The PICs say HOME-PHONE looks
like this ___
02 EMPLOYEE-NAME-REPORTED PIC X(40).6176662666
02 HOME-PHONE-REPORTED.but make HOME-PHONE-REPORTED
look like this:
03 LEFT-PARENTHESIS PIC X.(617) 666-2666
03 AREA-CODE-REPORTED PIC 999.
03 RIGHT-PARENTHESIS PIC X.
03 PHONE-EXCHANGE-REPORTED PIC B999.
03 THE-DASH PIC X.
03 REST-OF-PHONE-NUMBER-REPORTED PIC 9999.
PROCEDURE DIVISION.
MAIN-ROUTINE-BEGINNING.
OPEN INPUT EMPLOY-FILE.
OPEN OUTPUT REPORT-FILE.
MAIN-ROUTINE-LOOP. The MAIN-ROUTINE-LOOP
READ EMPLOY-FILE AT END GO TO MAIN-ROUTINE-ENDING.reads a
line from EMPLOY-FILE,
MOVE EMPLOYEE-NAME TO EMPLOYEE-NAME-REPORTED.copies data
into each part of REPORT-LINE,
MOVE "(" TO LEFT-PARENTHESIS.
MOVE AREA-CODE TO AREA-CODE-REPORTED.
MOVE ")" TO RIGHT-PARENTHESIS.
MOVE PHONE-EXCHANGE TO PHONE-EXCHANGE-REPORTED.
MOVE "-" TO THE-DASH.
MOVE REST-OF-PHONE-NUMBER TO
REST-OF-PHONE-NUMBER-REPORTED.
WRITE REPORT-LINE. and then writes REPORT-LINE.
GO TO MAIN-ROUTINE-LOOP.
MAIN-ROUTINE-ENDING.
CLOSE EMPLOY-FILE REPORT-FILE.
STOP RUN.
SORT
Suppose CUSTOM is a disk file that contains information about
your customers. Suppose each line of the file contains 80
characters, as follows. . . .
Characters 1-20: the customer's last name
Characters 21-80: other information about the customer
Alphabetical order Here's how to put the file in alphabetical
order, according to the customer's name:
IDENTIFICATION DIVISION.
PROGRAM-ID.
ALPHA.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER.
The computer's name.
OBJECT-COMPUTER.
The computer's name again.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CUSTOM-FILE ASSIGN TO the location of CUSTOM.
SELECT SORT-FILE ASSIGN TO the location of SORT.
DATA DIVISION.
FILE SECTION.
FD CUSTOM-FILE the labeling for CUSTOM.
01 CUSTOM-LINE PIC X(80).
SD SORT-FILE.
01 SORT-LINE.
02 LAST-NAME PIC X(20).
02 FILLER PIC X(60).
PROCEDURE DIVISION.
MAIN-ROUTINE.
SORT SORT-FILE
ASCENDING KEY LAST-NAME
USING CUSTOM-FILE
GIVING CUSTOM-FILE.
STOP RUN.
Putting a file in order, by alphabetizing or any other method,
is called sorting. To sort the CUSTOM-FILE, the computer has to
create a temporary disk file called a SORT-FILE.
In the sentence that says SELECT SORT-FILE, here's what to put
for ``the location of SORT'':
Computer The location of SORT
Eclipse "SORT"
CDC SORT
PDP-10, PDP-20DSK DSK DSK RECORDING MODE ASCII
IBM using OSUT-S-POEM
IBM using DOSSYS001-UT-3330-S-SORTWK1
In the DATA DIVISION's FILE SECTION, the SD means a Sort-file
Description. In the PROCEDURE DIVISION, the SORT sentence makes
the computer automatically open the CUSTOM-FILE, sort it, and
close it.
In the SORT sentence, if you replace ASCENDING by DESCENDING,
the computer will sort the file in reverse order, so the Z's come
first and the A's come last.
You can make the program fancier, by inserting extra statements
before and after the SORT statement. But since the SORT statement
automatically tells the computer to open CUSTOM-FILE, the
CUSTOM-FILE must not be open already. If you already said OPEN
CUSTOM-FILE, you must say CLOSE CUSTOM-FILE before you give the
SORT statement.
If you replace GIVING CUSTOM-FILE by GIVING REPORT-FILE, the
computer won't change CUSTOM-FILE, but will create a REPORT-FILE
containing the information sorted. For REPORT-FILE, you must type
an FD and SELECT it. The computer will automatically open it, so
it
must not be open already.
Who bought the most?
Within each line of CUSTOM-FILE, suppose characters 51-57 tell
how much the customer bought from you during the past year. Let's
find out which customers bought the most.
Let's make the computer
print the customer that bought the most, then the customer that
bought the next most, etc. If two customers bought exactly the
same amount, let's make the computer print their names in
alphabetical order.
This program does it:
IDENTIFICATION DIVISION.
PROGRAM-ID.
BIGBUY.
The ENVIRONMENT DIVISION is same as the previous program's.
DATA DIVISION.
FILE SECTION.
FD CUSTOM-FILE the labeling for CUSTOM.
01 CUSTOM-LINE PIC X(80).
SD SORT-FILE.
01 SORT-LINE.
02 LAST-NAME PIC X(20).
characters 1-20
02 FILLER PIC X(30).
characters 21-50
02 AMOUNT-BOUGHT-DURING-YEAR PIC 99999V99.
02 FILLER PIC X(23).
PROCEDURE DIVISION.
MAIN-ROUTINE.
SORT SORT-FILE
DESCENDING KEY AMOUNT-BOUGHT-DURING-YEAR
ASCENDING KEY LAST-NAME
USING CUSTOM-FILE
GIVING CUSTOM-FILE.
STOP RUN.
The SORT sentence says:
sort the file so that AMOUNT-BOUGHT-DURING-YEAR is in DESCENDING
order; in case of a tie, put LAST-NAME in ASCENDING order.
MERGE
Suppose OLDCUS and NEWCUS are files: OLDCUS describes your old
customers, and NEWCUS describes your newer customers. In those
files, each line contains 80 characters; characters 1-20 contain
the customer's last name. Each file's already in alphabetical
order, by customer's last name.
Let's combine the two files. In other words, let's create a
``combination'' file (on disk or printer paper), called ALLCUS,
that contains all the customers; and let's make ALLCUS be in
alphabetical order also. Here's how:
IDENTIFICATION DIVISION.
PROGRAM-ID.
MERGER.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER.
The computer's name.
OBJECT-COMPUTER.
The computer's name again.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT OLDCUS-FILE ASSIGN TO the location of OLDCUS.
SELECT NEWCUS-FILE ASSIGN TO the location of NEWCUS.
SELECT ALLCUS-FILE ASSIGN TO the location of ALLCUS.
SELECT SORT-FILE ASSIGN TO the location of SORT.
DATA DIVISION.
FILE SECTION.
FD OLDCUS-FILE the labeling for OLDCUS.
01 OLDCUS-LINE PIC X(80).
FD NEWCUS-FILE the labeling for NEWCUS.
01 NEWCUS-LINE PIC X(80).
FD ALLCUS-FILE the labeling for ALLCUS.
01 ALLCUS-LINE PIC X(80).
SD SORT-FILE.
01 SORT-LINE.
02 LAST-NAME PIC X(20).
02 FILLER PIC X(60).
PROCEDURE DIVISION.
MAIN-ROUTINE.
MERGE SORT-FILE
ASCENDING KEY LAST-NAME
USING OLDCUS-FILE NEWCUS-FILE
GIVING ALLCUS-FILE.
STOP RUN.
That program creates ALLCUS, which is a combination of OLDCUS
and NEWCUS. To do that, the computer must create a SORT-FILE.
The word MERGE automatically opens and closes all the files
involved. so do not say OPEN or CLOSE.
Warning: the word MERGE is in COBOL 74 but not in COBOL 68. So
if your computer is old-fashioned and understands just COBOL 68,
it doesn't understand the word MERGE.
If your computer understands the word MERGE, you can merge as
many files as you like. For example, if you have files called
CUS1, CUS2, CUS3, and CUS4, you can say:
MERGE SORT-FILE
ASCENDING KEY LAST-NAME
USING CUS1-FILE CUS2-FILE CUS3-FILE CUS4-FILE
GIVING ALLCUS-FILE.
Before you MERGE, make sure that the files you're USING are
already in alphabetical order.
Subscripts
Like other computer languages, COBOL lets you use subscripts.
For example, suppose your 4 favorite friends are SUE, JOE, TOM,
and ANN. Let's make FAVORITE-FRIEND (1) be ``SUE'',
FAVORITE-FRIEND (2) be ``JOE'', FAVORITE-FRIEND (3) be ``TOM'',
and FAVORITE-FRIEND (4) be ``ANN''. Here's how:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 FAVORITE-FRIEND-TABLE.
02 FAVORITE-FRIEND OCCURS 4 TIMES PIC XXX.You have 4
FAVORITE-FRIENDs; each has PIC XXX.
PROCEDURE DIVISION.
MAIN-ROUTINE.
MOVE "SUE" TO FAVORITE-FRIEND (1).
MOVE "JOE" TO FAVORITE-FRIEND (2).
MOVE "TOM" TO FAVORITE-FRIEND (3).
MOVE "ANN" TO FAVORITE-FRIEND (4).
DISPLAY FAVORITE-FRIEND (1).
DISPLAY FAVORITE-FRIEND (2).
DISPLAY FAVORITE-FRIEND (3).
DISPLAY FAVORITE-FRIEND (4).
STOP RUN.
The computer will display:
SUE
JOE
TOM
ANN
When typing the program, remember to put a blank space before
the subscript:
FAVORITE-FRIEND (1)
blank space
In COBOL, you say ``OCCURS'' instead of ``DIMENSION'':
BASIC: DIM F(4)
FORTRAN: DIMENSION F(4)
PASCAL: F: ARRAY [1..4]
COBOL: F OCCURS 4 TIMES
The subscript can be a variable. For example, instead of saying
___
DISPLAY FAVORITE-FRIEND (1).
DISPLAY FAVORITE-FRIEND (2).
DISPLAY FAVORITE-FRIEND (3).
DISPLAY FAVORITE-FRIEND (4).
you can say:
DISPLAY FAVORITE-FRIEND (I).
To do that, you must tell the computer that the I goes from 1 to
4. Here's how:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 FAVORITE-FRIEND-TABLE.
02 FAVORITE-FRIEND OCCURS 4 TIMES PIC XXX.
01 I PIC 9. I is a one-digit number.
PROCEDURE DIVISION.
MAIN-ROUTINE.
MOVE "SUE" TO FAVORITE-FRIEND (1).
MOVE "JOE" TO FAVORITE-FRIEND (2).
MOVE "TOM" TO FAVORITE-FRIEND (3).
MOVE "ANN" TO FAVORITE-FRIEND (4).
PERFORM SHOW-FRIENDSHIP
VARYING I FROM 1 BY 1 UNTIL I > 4.I will be 1, 2,
3, 4.
STOP RUN.
SHOW-FRIENDSHIP.
DISPLAY FAVORITE-FRIEND (I).I is the subscript.
To make the program run faster, say ``COMP'' at the end of the
subscript's picture:
ComputerWhat to say
PDP, Eclipse01 I PIC 9 COMP.
CDC 01 I PIC 9 COMP-1.
IBM 01 I PIC 9 COMP SYNC.
COMP stands for the word COMPUTATIONAL; SYNC stands for the word
SYNCHRONIZED.
A subscript cannot contain an operation:
Okay: FAVORITE-FRIEND (3)
Wrong:FAVORITE-FRIEND (2 + 1)The + is not allowed.
Here's how to make Y-TABLE be a table that has 4 rows and 6
columns:
01 Y-TABLE.
02 Y-ROW OCCURS 4 TIMES.
03 Y OCCURS 6 TIMES PIC XXX.
The entire table is called:
Y-TABLE
The first row of Y-TABLE is called:
Y-ROW (1)
The second row of Y-TABLE is called:
Y-ROW (2)
The entry in the 2nd row and 5th column of Y-TABLE is called:
Y (2, 5)
spaces
Test scores Suppose you teach 25 students, you've given each
student 4 tests, and you want to put the scores in a table.
You want the table to contain 25 rows (a row for each student).
In each row, you want the student's first name, middle initial,
last name, and 4 scores.
Here's how:
01 STUDENT-INFORMATION-TABLE.
02 STUDENT-INFORMATION-ROW OCCURS 25 TIMES.
03 FIRST-NAME PIC X(15).
03 MIDDLE-INITIAL PIC X.
03 LAST-NAME PIC X(20).
03 TEST-SCORE OCCURS 4 TIMES PIC 999.
The entire table is called:
STUDENT-INFORMATION-TABLE
The table contains 25 rows. The first row is called:
STUDENT-INFORMATION-ROW (1)
The twelfth row is called:
STUDENT-INFORMATION-ROW (12)
The information in the twelfth row is called:
FIRST-NAME (12)
MIDDLE-INITIAL (12)
LAST-NAME (12)
TEST-SCORE (12, 1)
TEST-SCORE (12, 2)
TEST-SCORE (12, 3)
TEST-SCORE (12, 4)
EXTRA COMMENTS
Put extra comments in
your program, to help your colleagues understand how the program
works.
IDENTIFICATION DIVISION
The IDENTIFICATION
DIVISION can include these paragraphs:
PROGRAM-ID.
AUTHOR.
INSTALLATION.
DATE-WRITTEN.
DATE-COMPILED.
SECURITY.
In each paragraph after the PROGRAM-ID, put whatever garbage you
please. The computer ignores everything the IDENTIFICATION
DIVISION says.
The IDENTIFICATION
DIVISION helps the computer center's librarian classify your
program. The librarian wants the INSTALLATION paragraph to
contain the computer center's name and address, the DATE-WRITTEN
paragraph to tell when you finished debugging the program, the
DATE-COMPILED paragraph to tell when the computer translated the
program from COBOL into machine language, and the SECURITY
paragraph to tell who may look at the program and who must not.
If you put the wrong
date in the date-compiled paragraph, don't worry: when you ask
the computer to produce a COBOL listing of your program, the
listing will automatically show the correct date instead.
Asterisks
The computer ignores any
line that begins with an asterisk. So if you put this line in
your program ___
*THIS IS A LOUSY PROGRAM
___ the computer will ignore the comment.
Create comments that
explain how your program works. Put the comments near the bottom
of the IDENTIFICATION DIVISION, near the top of the PROCEDURE
DIVISION, and wherever your program looks confusing.
On PDP and Eclipse
computers, put the asterisk at the far left; don't put any blank
spaces before the asterisk. On IBM and CDC computers, put six
blank spaces before the asterisk, so that the asterisk is in
column 7.